# LeetCode 226、翻转二叉树
# 一、题目描述
你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
示例 1:
img
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
示例 2:
img
输入:root = [2,1,3]
输出:[2,3,1]
示例 3:
输入:root = []
输出:[]
提示:
- 树中节点数目范围在
[0, 100]
内 -100 <= Node.val <= 100
# 二、题目解析
# 三、参考代码
# 1、Java 代码
// 登录 AlgoMooc 官网获取更多算法图解
// https://www.algomooc.com
// 作者:程序员吴师兄
// 微信:wzb_3377
// 代码有看不懂的地方一定要私聊咨询吴师兄呀
// 翻转二叉树(LeetCode 226):https://leetcode.cn/problems/invert-binary-tree/
class Solution {
public TreeNode invertTree(TreeNode root) {
// 1、递归终止条件一,当前节点为空的时候,就返回 null
if(root == null) return null;
// 2、递归终止条件二,当前节点为叶子节点的时候,就返回这个节点
if( root.left == null && root.right == null){
// 返回这个节点
return root;
}
// 3、把当前这个节点 root 的左子树进行翻转操作
TreeNode left = invertTree(root.left);
// 4、把当前这个节点 root 的右子树进行翻转操作
TreeNode right = invertTree(root.right);
// 5、把翻转成功的右子树赋值给 root 的左子树
root.left = right;
// 6、把翻转成功的左子树赋值给 root 的右子树
root.right = left;
// 7、返回翻转成功的二叉树的根节点
return root;
}
}
# 2、C++ 代码
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
// 1、递归终止条件一,当前节点为空的时候,就返回 nullptr
if(root == nullptr) return nullptr;
// 2、递归终止条件二,当前节点为叶子节点的时候,就返回这个节点
if( root->left == nullptr && root->right == nullptr){
// 返回这个节点
return root;
}
// 3、把当前这个节点 root 的左子树进行翻转操作
TreeNode *left = invertTree(root->left);
// 4、把当前这个节点 root 的右子树进行翻转操作
TreeNode *right = invertTree(root->right);
// 5、把翻转成功的右子树赋值给 root 的左子树
root->left = right;
// 6、把翻转成功的左子树赋值给 root 的右子树
root->right = left;
// 7、返回翻转成功的二叉树的根节点
return root;
}
};
# 3、Python 代码
class Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
# 1、递归终止条件一,当前节点为空的时候,就返回 null
if not root : return None
# 2、递归终止条件二,当前节点为叶子节点的时候,就返回这个节点
if root.left == None and root.right == None :
# 返回这个节点
return root
# 3、把当前这个节点 root 的左子树进行翻转操作
left = self.invertTree(root.left)
# 4、把当前这个节点 root 的右子树进行翻转操作
right = self.invertTree(root.right)
# 5、把翻转成功的右子树赋值给 root 的左子树
root.left = right
# 6、把翻转成功的左子树赋值给 root 的右子树
root.right = left
# 7、返回翻转成功的二叉树的根节点
return root